package com.mipo.client.javase.designerpattern.proxypattern.staticproxy.rolesresponsibilities;

/**
	测试类
	1，代理模式的作用是：为其他对象提供一种代理以控制对这个对象的访问。
	2，代理模式有什么好处？在某些情况下，一个客户不想或者不能直接引用另一个对象，而代理对象可以在客户端和目标对象之间起到中介的作用。
	3，代理模式一般涉及到的角色有：
	抽象角色：声明真实对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。
	代理角色：代理对象内部含有目标对象的引用，从而可以在任何时候操作目标对象；
	代理对象提供一个与目标对象相同的接口，以便可以在任何时候替代目标对象。
	代理对象通常在客户端调用传递给目标对象之前或之后，执行某个操作，而不是单纯地将调用传递给目标对象，同时，
	代理对象可以在执行真实对象操作时，附加其他的操作，相当于对真实对象进行封装。
	真实角色：定义了代理对象所代表的目标对象，
	代理角色所代表的真实对象，是我们最终要引用的对象,定义了代理对象所代表的目标对象。

	装饰器模式关注于在一个对象上动态的添加方法，然而代理模式关注于控制对对象的访问。换句话 说，用代理模式，代理类（proxy class）可以对它的客户隐藏一个对象的具体信息。
	因此，当使用代理模式的时候，常常在一个代理类中创建一个对象的实例。并且，当使用装饰器模 式的时候，通常的做法是将原始对象作为一个参数传给装饰者的构造器。-------
	代理模式的作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下，一个客户不想或者不能直接引用另一个对象，而代理对象可以在客户端和目标对象之间起到中介的作用。
	静态代理模式中，真实角色必须是事先已经存在的，并将其作为代理对象的内部属性。

	静态代理模式代码
	静态代理事实上就是装饰者模式，区别是装饰者模式一般都是传入一个被装饰类在构造器中，而静态代理则是自己创建一个类作为成员变量；
	刚开始我会觉得SubjectProxy定义出来纯属多余，直接实例化实现类完成操作不就结了吗？后来随着业务庞大，你就会知道，
	实现proxy类对真实类的封装对于粒度的控制有着重要的意义。但是静态代理这个模式本身有个大问题，
	如果类方法数量越来越多的时候，代理类的代码量是十分庞大的。所以引入动态代理来解决此类问题。
 */
public class AaMain {
	
	public static void main(String args[]) {
		Subject sub = new SubjectProxy();
		sub.doSomething();
	}
	
}
